# 给你N 叉树的根节点 root ，返回其节点值的 层序遍历 。 （即逐层地，从左到右访问所有节点）。
from collections import deque
from typing import Optional, List


class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children


class Solution:
    def levelOrder(self, root: Optional[Node]) -> List[List[int]]:
        if root is None:
            return []
        res, queue = [], [root]
        while queue:
            res.append([node.val for node in queue])  # 将当前层的节点值加入结果，作为层次遍历的一个层级结果
            # 从当前队列(queue)中的每个节点生成新的子节点列表，并将这些子节点添加到新的队列中，以供后续继续遍历N叉树的下一层节点
            # 表达式从外到内逐步展开
            # for node in queue: 遍历当前队列中的每个节点。
            # for child in node.children: 对于当前节点 node，遍历其所有子节点
            # if child: 只有当 child 不为空
            queue = [child for node in queue for child in node.children if child]
        # 等价于下面的代码
        # queue = deque[Node]([root])
        # while queue:
        #     cur_level_count, cur_leve_vals = len(queue), list[int]()
        #     # 遍历当前层的节点值加入结果，作为层次遍历的一个层级结果，并将下一层的节点值加入队列，以供后续继续遍历二叉树的下一层节点
        #     for i in range(cur_level_count):
        #         tmp_node = queue.popleft()
        #         cur_leve_vals.append(tmp_node.val)
        #         queue.extend([child for child in tmp_node.children if child])
        #     res.append(cur_leve_vals)
        return res
